DynamoDB のテーブルを Data Pipeline でエクスポートする
2017年12月7日時点で、本記事に記載のマネジメントコンソールからのインポート/エクスポートの操作ボタンが表示されなくなっていることを確認しました。今後は新しく追加されたバックアップ/リストア機能が利用可能です。
こんにちは、菊池です。
DynamoDBのデータをバックアップする手段として、Data Pipelineを利用したエクスポートを試してみました。
DynamoDBにはバックアップ機能は提供されていませんが、以下で紹介されているように、他のサービスと連携させることでデータのバックアップが可能です。
やってみた
公式ドキュメントの手順に沿ってやってみます。
事前準備
エクスポートの実行前に、以下の2つを準備しておきます。
- IAMロールの作成
- エクスポート先となるS3バケットの作成
IAMロールの作成
以下のような2つのIAMロールを作成します。
- DataPipelineDefaultRole
- ロールタイプ:AWSサービスロール/AWS Data Pipeline
- ポリシー:AWSDataPipelineRole
- DataPipelineDefaultResourceRole
- ロールタイプ:AWSサービスロール/Amazon EC2 Role for Data Pipeline
- ポリシー:AmazonEC2RoleforDataPipelineRole
S3バケットの作成
エクスポート先のS3バケット、フォルダを任意の名称で作成しておきます。
エクスポートの実行
DynamoDBのコンソールからテーブルを選択し、[アクション] -> [エクスポート]を選びます。
すると、Data Pipelineのコンソールへ飛び、Pipelineの作成画面となります。
まずは基本のパラメータです。テーブル名とターゲットのS3バケット/フォルダを入力します。
次に、スケージュールの設定です。日次、週次など、定期的なスケジュールでの実行や開始時間を指定することも可能となっています。今回はワンタイムで即時の実行にしました。
ログ出力を有効化する場合には、出力先のS3と合わせて設定します。
続いてIAMロールです。Defaultを選択すれば、先ほど作成したIAMロールが利用されます。
最後に、任意のタグを設定し、[Activate]を選択します。
すると、Pipelineが作成・実行されます。この間に、EMRのクラスタが起動し、データのエクスポートが実行されています。
しばらくすると、ステータスが[FINISHED]となりました。
出力先のS3を確認すると、3つのファイルが出力されています。
ダウンロードして中身を確認すると、このようにテーブルのデータが出力されています。
$ cat 84ad5555-cfda-4126-8405-4b86586ecb57 {"id":{"s":"001"},"name":{"s":"hoge1"}} {"id":{"s":"003"},"name":{"s":"hoge3"}} {"id":{"s":"002"},"name":{"s":"hoge2"}}
まとめ
以上です。
DynamoDBのエクスポートを試してみました。Data Pipeline、EMRといった他のサービスと統合された処理が、簡単に作成・実行可能になっています。
なお、本番環境で利用する際には、DynamoDBのReadキャパシティの消費と、EMRによって起動するEC2のコストに注意しましょう。